#include "reseau.h"



Reseau::Reseau()
{
        m_socket = new QTcpSocket();
        m_tailleMessage = 0;
}

Reseau::~Reseau()
{
        delete m_socket;
}


QString Reseau::donneesRecues()
{
    QDataStream in(m_socket);

    if (m_tailleMessage == 0)
    {
        if (m_socket->bytesAvailable() < (int)sizeof(quint16))
            return "<em>ERREUR: Message non recu<em>";

        in >> m_tailleMessage;
    }

    if (m_socket->bytesAvailable() < m_tailleMessage)
        return "<em>ERREUR: Message non recu<em>";

    QString messageRecu;
    in >> messageRecu;

    m_tailleMessage = 0;

    m_socket->flush();
    return messageRecu;
}

QString Reseau::envoyerDonnees(const QString &messageAEnvoyer)
{
    QByteArray paquet;
    QDataStream out(&paquet, QIODevice::WriteOnly);

    out << (quint16) 0;
    out << messageAEnvoyer;
    out.device()->seek(0);
    out << (quint16) (paquet.size() - sizeof(quint16));


    if(m_socket->write(paquet) == -1)
    {
        return "<em>ERREUR: Envoi message => <em>" + messageAEnvoyer;
    }
    return QString::fromUtf8("Message envoyé :") + messageAEnvoyer;
}

QString Reseau::connecte(QString adresseServeur)
{
    this->m_adresseServeur = adresseServeur;
    this->m_portServeur = 33555;
    m_socket->abort();
    m_socket->connectToHost(m_adresseServeur, m_portServeur);
    return QString::fromUtf8("<em> : Connexion réussie !</em>");
}

QString Reseau::deconnecte()
{
    return QString::fromUtf8("<em> : Vient de se déconnecter!<em>");
}

QString Reseau::erreurSocket(QAbstractSocket::SocketError erreur)
{
    switch(erreur) // On affiche un message différent selon l'erreur qu'on nous indique
    {
        case QAbstractSocket::HostNotFoundError:
            return "<em>ERREUR : le serveur n'a pas pu être trouvé. Vérifiez l'IP et le port.</em>";
            break;
        case QAbstractSocket::ConnectionRefusedError:
            return "<em>ERREUR : le serveur a refusé la connexion. Vérifiez si le programme \"serveur\" a bien été lancé. Vérifiez aussi l'IP et le port.</em>";
            break;
        case QAbstractSocket::RemoteHostClosedError:
            return "<em>ERREUR : le serveur a coupé la connexion.</em>";
            break;
        default:
            return "<em>ERREUR : " + m_socket->errorString() + "</em>";
    }
}

QTcpSocket *Reseau::getSocket()
{
    return m_socket;
}
